/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.controller;

import com.persistencia.domain.*;
import com.service.AsignaturaService;
import com.service.DocentexClaseService;
import com.service.GrupoService;
import com.service.impl.AsignaturaServiceImpl;
import com.service.impl.DocentexClaseServiceImpl;
import com.service.impl.GrupoServiceImpl;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import org.apache.log4j.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author SHERLY
 */
@ManagedBean
@ViewScoped
public class GrupoController {
    
    private List<Grupo> listaGrupo;
    private Grupo grupo;
    private Grupo grupoSeleccionado;
    private GrupoService grupoService;
    private AsignaturaService asignaturaService;
    private DocentexClaseService docenteXClaseService;    
    private Logger log;
    private String tipoCreacion;
    private String NAsgId;
    private String NCicId;
    private String NCicAcdId;
    private String NTipoDictado;
    private int NCantidad;
    private boolean visible;    
    
    public GrupoController() {
        listaGrupo = new ArrayList<Grupo>();
        grupo = new Grupo();
        grupoSeleccionado = new Grupo();
        grupoService = new GrupoServiceImpl();
        asignaturaService = new AsignaturaServiceImpl();
        docenteXClaseService = new DocentexClaseServiceImpl();
        log = Logger.getLogger(GrupoController.class);
        tipoCreacion = "1";
        visible = false;
        //listarGrupo();
    }
    
    private void listarGrupo(){
        log.info("Inicio");
        try {
            listaGrupo = grupoService.obtenerListaGrupo();
            log.info("cantidad de grupos "+listaGrupo.size());
        } catch (Exception ex) {
            log.info("Error al Listar");
            System.out.println("error al listar");
        }
        log.info("Fin");
    }
    
    public void grabarGrupo(){
        FacesMessage msg = null;
        try{
            System.out.println("Entramos a grabar claseXDocente");
            
            if( tipoCreacion.equals("1") ){
                //Por Ciclo
                List<Asignatura> listaAsignatura = asignaturaService.obtenerListaAsignaturaPorCicloAcademico(
                                                    new Cicloacademico(Integer.parseInt(NCicAcdId)));
                for (Asignatura asignatura : listaAsignatura) {
                    grabarGrupoPorAsignatura(asignatura);
                }
            }else if( tipoCreacion.equals("2") ){
                      //Por Asignatura
                      Asignatura asignatura = asignaturaService.obtenerAsignaturaPorId(Integer.parseInt(NAsgId));
                      grabarGrupoPorAsignatura(asignatura);                      
                  }
            
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"Inserción","Los Grupos se crearon satisfactoriamente.");
            grupo = new Grupo();
            //grupoService.registrarGrupo(grupo);
            //listarGrupo();
        } catch (Exception ex) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,"Inserción","No se registro el grupo.");
        }
        finally{            
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }
    
    private void grabarGrupoPorAsignatura(Asignatura asignatura){
        try {            
            System.out.println("asignatura="+asignatura);
            System.out.println("size="+asignatura.getClaseList().size());
            for (Clase clase : asignatura.getClaseList()) {
                if( clase.getNMdlDctId().getNMdlDctId() == Integer.parseInt(NTipoDictado) || NTipoDictado.equals("0") ){
                    System.out.println("NClsId="+clase.getNClsId());
                    System.out.println("NMdlDctId().getVNombre()="+clase.getNMdlDctId().getVNombre());
                    System.out.println("getNMdlDctId ="+clase.getNMdlDctId().getNMdlDctId());
                    System.out.println("si entro,NTipoDictado="+NTipoDictado);
                    System.out.println("NCantidad="+NCantidad);
                    for (int i = 0; i < NCantidad; i++) {
                        Docentexclase docentexclase = new Docentexclase();
                        docentexclase.setNCicId(new Ciclo(Integer.parseInt(NCicId)));
                        docentexclase.setNClsId(new Clase(clase.getNClsId()));
                        docentexclase.setVEstado("1");
                        docenteXClaseService.registrarDocentexclase(docentexclase);
                    }                    
                }
            }
        } catch (Exception ex) {
            java.util.logging.Logger.getLogger(GrupoController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void updateControl(){
        visible = !visible;
        System.out.println("visible="+visible);
    }

    //<editor-fold defaultstate="collapsed" desc="GETTER and SETTER">  
    
    public String getNAsgId() {
        return NAsgId;
    }

    public void setNAsgId(String NAsgId) {
        this.NAsgId = NAsgId;
    }

    public int getNCantidad() {
        return NCantidad;
    }

    public void setNCantidad(int NCantidad) {
        this.NCantidad = NCantidad;
    }

    public String getNCicAcdId() {
        return NCicAcdId;
    }

    public void setNCicAcdId(String NCicAcdId) {
        this.NCicAcdId = NCicAcdId;
    }

    public String getNCicId() {
        return NCicId;
    }

    public void setNCicId(String NCicId) {
        this.NCicId = NCicId;
    }

    public String getNTipoDictado() {
        return NTipoDictado;
    }

    public void setNTipoDictado(String NTipoDictado) {
        this.NTipoDictado = NTipoDictado;
    }

    public AsignaturaService getAsignaturaService() {
        return asignaturaService;
    }

    public void setAsignaturaService(AsignaturaService asignaturaService) {
        this.asignaturaService = asignaturaService;
    }

/*    public DocenteXClaseService getDocenteXClaseService() {
        return docenteXClaseService;
    }

    public void setDocenteXClaseService(DocenteXClaseService docenteXClaseService) {
        this.docenteXClaseService = docenteXClaseService;
    }*/

    public Grupo getGrupo() {
        return grupo;
    }

    public void setGrupo(Grupo grupo) {
        this.grupo = grupo;
    }

    public Grupo getGrupoSeleccionado() {
        return grupoSeleccionado;
    }

    public void setGrupoSeleccionado(Grupo grupoSeleccionado) {
        this.grupoSeleccionado = grupoSeleccionado;
    }

    public GrupoService getGrupoService() {
        return grupoService;
    }

    public void setGrupoService(GrupoService grupoService) {
        this.grupoService = grupoService;
    }

    public List<Grupo> getListaGrupo() {
        return listaGrupo;
    }

    public void setListaGrupo(List<Grupo> listaGrupo) {
        this.listaGrupo = listaGrupo;
    }

    public Logger getLog() {
        return log;
    }

    public void setLog(Logger log) {
        this.log = log;
    }

    public String getTipoCreacion() {
        return tipoCreacion;
    }

    public void setTipoCreacion(String tipoCreacion) {
        this.tipoCreacion = tipoCreacion;
    }

    public boolean isVisible() {
        return visible;
    }

    public void setVisible(boolean visible) {
        this.visible = visible;
    }
    
    //</editor-fold>
   
}